﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Reflection;
using System.IO;
using System.Diagnostics;

namespace template_dll
{
    public partial class ChildForm : Form
    {
        public ChildForm()
        {
            InitializeComponent();
        }
        //private DateTime dt = new DateTime();                   //- Загрузка даты (года)
        public int dt;
        public DataTable[] dt_plans = new DataTable[14];        //- Для отображения планов на форме
        public DataTable dt_ret;                                //- Для загрузки дополнительных данных
        public DataTable[] dt_catalog = new DataTable[2];       //- Для загрузки каталога списков
        public int pointer = new int();                         //- Указатель массива
        public int pp;                                          //- Плановый период 1-4
        private const string namechcol = "Флаг";
        private SqlConnection conn;                             //- База маркетологов
        private SqlConnection conn1;                            //- База с прайсами
        public string qwer;                                     //- Для перетаскивания значений ячеек
        public string pGroup;                                   //- Группа каталога
        private delegate void Deleg();
        public int indexPeriod;                                 //- Для определения длительности периода
        private DataTable dt_rezlt = new DataTable();

        public static bool DisplayForm(System.Windows.Forms.Form theMDIParent)
        {
            ChildForm f = new ChildForm();
            f.MdiParent = theMDIParent;
            f.WindowState = FormWindowState.Maximized;
            f.Show();
            return true;
        }

        public class cMain
        {
            public static Control Form1Control = null;
            private cMain() { }
        }

        private string GetServ(string filename)
        {
            string str = "";
            using (StreamReader streamReader = new StreamReader(filename))
            {
                while (!streamReader.EndOfStream)
                {
                    str += streamReader.ReadLine();
                }
            }
            return str;
        }

        private void ChildForm_Load(object sender, EventArgs e)
        {
            cMain.Form1Control = this;
            conn = new SqlConnection(@"Server=" + GetServ("serv.txt") + ";Database=ToolsDM;Integrated Security=True");
            conn1 = new SqlConnection(@"Server=" + GetServ("serv.txt") + ";Database=AllPriceDW;Integrated Security=True");
            this.Text = "Заполнение планов";
            dt = DateTime.Now.Year;
            radioButton5.Checked = true;
            indexPeriod = 0;
            for (int d = 0; d < 20; d++)
            {
                comboBox2.Items.Add(dt + d);
            }
            comboBox2.SelectedIndex = 1;
            groupBox5.Visible = false;
            SqlStorProc.sp_params[] par = new SqlStorProc.sp_params[1];
            par[0].name = "@pointer";
            par[0].value = 2;
            dt_catalog = (new SqlStorProc()).SqlProcExecWithQuery(conn, "pas_FillAttributesDrugs", 300, par);
            changePointer();
            changePeriod();
            comboBox1.SelectedIndex = 0;

            pp = 1;
            dt = Convert.ToInt32(comboBox2.Text);
            for (int i = 0; i < 14; i++)
            {
                dt_plans[i] = new DataTable("DataTable" + i);
            }
            dt_plans[0].Columns.Add("Код товара");
            dt_plans[0].Columns.Add("Наименование товара");
            dt_plans[0].Columns.Add("Контрагент");
            dt_plans[0].Columns.Add("Плановый период");
            dt_plans[0].Columns.Add("Учётная цена");
            dt_plans[0].Columns.Add("План минимальный рубли");
            dt_plans[0].Columns.Add("План средний рубли");
            dt_plans[0].Columns.Add("План максимальный рубли");
            dt_plans[0].Columns.Add("Бонус минимальный рубли");
            dt_plans[0].Columns.Add("Бонус средний рубли");
            dt_plans[0].Columns.Add("Бонус максимальный рубли");

            dt_plans[1].Columns.Add("Код товара");
            dt_plans[1].Columns.Add("Наименование товара");
            dt_plans[1].Columns.Add("Контрагент");
            dt_plans[1].Columns.Add("Плановый период");
            dt_plans[1].Columns.Add("Учётная цена");
            dt_plans[1].Columns.Add("План минимальный рубли");
            dt_plans[1].Columns.Add("План средний рубли");
            dt_plans[1].Columns.Add("План максимальный рубли");
            dt_plans[1].Columns.Add("Бонус минимальный %");
            dt_plans[1].Columns.Add("Бонус средний %");
            dt_plans[1].Columns.Add("Бонус максимальный %");

            dt_plans[2].Columns.Add("Код товара");
            dt_plans[2].Columns.Add("Наименование товара");
            dt_plans[2].Columns.Add("Контрагент");
            dt_plans[2].Columns.Add("Плановый период");
            dt_plans[2].Columns.Add("Учётная цена");
            dt_plans[2].Columns.Add("План минимальный рубли");
            dt_plans[2].Columns.Add("План средний рубли");
            dt_plans[2].Columns.Add("План максимальный рубли");
            dt_plans[2].Columns.Add("Бонус минимальный рубли");
            dt_plans[2].Columns.Add("Бонус средний рубли");
            dt_plans[2].Columns.Add("Бонус максимальный рубли");
            dt_plans[2].Columns.Add("Бонус минимальный %");
            dt_plans[2].Columns.Add("Бонус средний %");
            dt_plans[2].Columns.Add("Бонус максимальный %");

            dt_plans[3].Columns.Add("Код товара");
            dt_plans[3].Columns.Add("Наименование товара");
            dt_plans[3].Columns.Add("Контрагент");
            dt_plans[3].Columns.Add("Плановый период");
            dt_plans[3].Columns.Add("Учётная цена");
            dt_plans[3].Columns.Add("План минимальный штуки");
            dt_plans[3].Columns.Add("План средний штуки");
            dt_plans[3].Columns.Add("План максимальный штуки");
            dt_plans[3].Columns.Add("Бонус минимальный рубли");
            dt_plans[3].Columns.Add("Бонус средний рубли");
            dt_plans[3].Columns.Add("Бонус максимальный рубли");

            dt_plans[4].Columns.Add("Код товара");
            dt_plans[4].Columns.Add("Наименование товара");
            dt_plans[4].Columns.Add("Контрагент");
            dt_plans[4].Columns.Add("Плановый период");
            dt_plans[4].Columns.Add("Учётная цена");
            dt_plans[4].Columns.Add("План минимальный штуки");
            dt_plans[4].Columns.Add("План средний штуки");
            dt_plans[4].Columns.Add("План максимальный штуки");
            dt_plans[4].Columns.Add("Бонус минимальный %");
            dt_plans[4].Columns.Add("Бонус средний %");
            dt_plans[4].Columns.Add("Бонус максимальный %");

            dt_plans[5].Columns.Add("Код товара");
            dt_plans[5].Columns.Add("Наименование товара");
            dt_plans[5].Columns.Add("Контрагент");
            dt_plans[5].Columns.Add("Плановый период");
            dt_plans[5].Columns.Add("Учётная цена");
            dt_plans[5].Columns.Add("План минимальный штуки");
            dt_plans[5].Columns.Add("План средний штуки");
            dt_plans[5].Columns.Add("План максимальный штуки");
            dt_plans[5].Columns.Add("Бонус минимальный рубли");
            dt_plans[5].Columns.Add("Бонус средний рубли");
            dt_plans[5].Columns.Add("Бонус максимальный рубли");
            dt_plans[5].Columns.Add("Бонус минимальный %");
            dt_plans[5].Columns.Add("Бонус средний %");
            dt_plans[5].Columns.Add("Бонус максимальный %");

            dt_plans[6].Columns.Add("Код товара");
            dt_plans[6].Columns.Add("Наименование товара");
            dt_plans[6].Columns.Add("Контрагент");
            dt_plans[6].Columns.Add("Плановый период");
            dt_plans[6].Columns.Add("Учётная цена");
            dt_plans[6].Columns.Add("План минимальный рубли");
            dt_plans[6].Columns.Add("План средний рубли");
            dt_plans[6].Columns.Add("План максимальный рубли");
            dt_plans[6].Columns.Add("План минимальный штуки");
            dt_plans[6].Columns.Add("План средний штуки");
            dt_plans[6].Columns.Add("План максимальный штуки");
            dt_plans[6].Columns.Add("Бонус минимальный рубли");
            dt_plans[6].Columns.Add("Бонус средний рубли");
            dt_plans[6].Columns.Add("Бонус максимальный рубли");
            dt_plans[6].Columns.Add("Бонус минимальный %");
            dt_plans[6].Columns.Add("Бонус средний %");
            dt_plans[6].Columns.Add("Бонус максимальный %");

            dt_plans[7].Columns.Add("Группа товара");
            dt_plans[7].Columns.Add("Плановый период");
            dt_plans[7].Columns.Add("План минимальный рубли");
            dt_plans[7].Columns.Add("План средний рубли");
            dt_plans[7].Columns.Add("План максимальный рубли");
            dt_plans[7].Columns.Add("Бонус минимальный рубли");
            dt_plans[7].Columns.Add("Бонус средний рубли");
            dt_plans[7].Columns.Add("Бонус максимальный рубли");

            dt_plans[8].Columns.Add("Группа товара");
            dt_plans[8].Columns.Add("Плановый период");
            dt_plans[8].Columns.Add("План минимальный рубли");
            dt_plans[8].Columns.Add("План средний рубли");
            dt_plans[8].Columns.Add("План максимальный рубли");
            dt_plans[8].Columns.Add("Бонус минимальный %");
            dt_plans[8].Columns.Add("Бонус средний %");
            dt_plans[8].Columns.Add("Бонус максимальный %");

            dt_plans[9].Columns.Add("Группа товара");
            dt_plans[9].Columns.Add("Плановый период");
            dt_plans[9].Columns.Add("План минимальный штуки");
            dt_plans[9].Columns.Add("План средний штуки");
            dt_plans[9].Columns.Add("План максимальный штуки");
            dt_plans[9].Columns.Add("Бонус минимальный рубли");
            dt_plans[9].Columns.Add("Бонус средний рубли");
            dt_plans[9].Columns.Add("Бонус максимальный рубли");

            dt_plans[10].Columns.Add("Группа товара");
            dt_plans[10].Columns.Add("Плановый период");
            dt_plans[10].Columns.Add("План минимальный штуки");
            dt_plans[10].Columns.Add("План средний штуки");
            dt_plans[10].Columns.Add("План максимальный штуки");
            dt_plans[10].Columns.Add("Бонус минимальный %");
            dt_plans[10].Columns.Add("Бонус средний %");
            dt_plans[10].Columns.Add("Бонус максимальный %");

            dt_plans[11].Columns.Add("Группа товара");
            dt_plans[11].Columns.Add("Плановый период");
            dt_plans[11].Columns.Add("План минимальный рубли");
            dt_plans[11].Columns.Add("План средний рубли");
            dt_plans[11].Columns.Add("План максимальный рубли");
            dt_plans[11].Columns.Add("Бонус минимальный рубли");
            dt_plans[11].Columns.Add("Бонус средний рубли");
            dt_plans[11].Columns.Add("Бонус максимальный рубли");
            dt_plans[11].Columns.Add("Бонус минимальный %");
            dt_plans[11].Columns.Add("Бонус средний %");
            dt_plans[11].Columns.Add("Бонус максимальный %");

            dt_plans[12].Columns.Add("Группа товара");
            dt_plans[12].Columns.Add("Плановый период");
            dt_plans[12].Columns.Add("План минимальный штуки");
            dt_plans[12].Columns.Add("План средний штуки");
            dt_plans[12].Columns.Add("План максимальный штуки");
            dt_plans[12].Columns.Add("Бонус минимальный рубли");
            dt_plans[12].Columns.Add("Бонус средний рубли");
            dt_plans[12].Columns.Add("Бонус максимальный рубли");
            dt_plans[12].Columns.Add("Бонус минимальный %");
            dt_plans[12].Columns.Add("Бонус средний %");
            dt_plans[12].Columns.Add("Бонус максимальный %");

            dt_plans[13].Columns.Add("Группа товара");
            dt_plans[13].Columns.Add("Плановый период");
            dt_plans[13].Columns.Add("План минимальный рубли");
            dt_plans[13].Columns.Add("План средний рубли");
            dt_plans[13].Columns.Add("План максимальный рубли");
            dt_plans[13].Columns.Add("План минимальный штуки");
            dt_plans[13].Columns.Add("План средний штуки");
            dt_plans[13].Columns.Add("План максимальный штуки");
            dt_plans[13].Columns.Add("Бонус минимальный рубли");
            dt_plans[13].Columns.Add("Бонус средний рубли");
            dt_plans[13].Columns.Add("Бонус максимальный рубли");
            dt_plans[13].Columns.Add("Бонус минимальный %");
            dt_plans[13].Columns.Add("Бонус средний %");
            dt_plans[13].Columns.Add("Бонус максимальный %");
        }

        private void button4_Click(object sender, EventArgs e)
        {
            //- Выгрузка в Excel файл
            ExpToExcel exp = new ExpToExcel();
            exp.ExportToExcel(dataGridView1);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //- Загрузить из Excel файла
            dataGridView1.DataSource = null;
            dt_ret = new DataTable();
            for (int i = 0; i < 14; i++)
            {
                dt_plans[i].Clear();
            }
            try
            {
                ExpToExcel ex = new ExpToExcel();
                ex.ImportExcel(dt_ret);
                if (dt_ret.Columns.Count > 0)
                {
                    switch (dt_ret.Columns.Count)
                    {
                        case 8:
                            if (dt_ret.Columns[2].Caption == "План минимальный рубли")
                            {
                                if (dt_ret.Columns[5].Caption == "Бонус минимальный рубли")
                                {
                                    pointer = 7;
                                    pointerChange(pointer);
                                }
                                else if (dt_ret.Columns[5].Caption == "Бонус минимальный %")
                                {
                                    pointer = 8;
                                    pointerChange(pointer);
                                }
                            }
                            else if (dt_ret.Columns[2].Caption == "План минимальный штуки")
                            {
                                if (dt_ret.Columns[5].Caption == "Бонус минимальный рубли")
                                {
                                    pointer = 9;
                                    pointerChange(pointer);
                                }
                                else if (dt_ret.Columns[5].Caption == "Бонус минимальный %")
                                {
                                    pointer = 10;
                                    pointerChange(pointer);
                                }
                            }
                            break;
                        case 11:
                            if (dt_ret.Columns[2].Caption == "План минимальный рубли")
                            {
                                pointer = 11;
                                pointerChange(pointer);
                            }
                            else if (dt_ret.Columns[2].Caption == "План минимальный штуки")
                            {
                                pointer = 12;
                                pointerChange(pointer);
                            }
                            else if (dt_ret.Columns[0].Caption == "Код товара")
                            {
                                if (dt_ret.Columns[5].Caption == "План минимальный рубли")
                                {
                                    if (dt_ret.Columns[8].Caption == "Бонус минимальный рубли")
                                    {
                                        pointer = 0;
                                        pointerChange(pointer);
                                    }
                                    else if (dt_ret.Columns[8].Caption == "Бонус минимальный %")
                                    {
                                        pointer = 1;
                                        pointerChange(pointer);
                                    }
                                }
                                else if (dt_ret.Columns[5].Caption == "План минимальный штуки")
                                {
                                    if (dt_ret.Columns[8].Caption == "Бонус минимальный рубли")
                                    {
                                        pointer = 3;
                                        pointerChange(pointer);
                                    }
                                    else if (dt_ret.Columns[8].Caption == "Бонус минимальный %")
                                    {
                                        pointer = 4;
                                        pointerChange(pointer);
                                    }
                                }
                            }
                            break;
                        case 14:
                            if (dt_ret.Columns[0].Caption == "Группа товара")
                            {
                                pointer = 13;
                                pointerChange(pointer);
                            }
                            else if (dt_ret.Columns[0].Caption == "Код товара")
                            {
                                if (dt_ret.Columns[5].Caption == "План минимальный рубли")
                                {
                                    pointer = 2;
                                    pointerChange(pointer);
                                }
                                else if (dt_ret.Columns[5].Caption == "План минимальный рубли")
                                {
                                    pointer = 5;
                                    pointerChange(pointer);
                                }
                            }
                            break;
                        case 17:
                            pointer = 6;
                            pointerChange(pointer);
                            break;
                    }
                    dt_plans[pointer] = dt_ret.Copy();
                    if (pointer >= 0 && pointer < 7)
                    {
                    }
                    else
                    {
                    }
                    dataGridView1.DataSource = dt_plans[pointer].DefaultView;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void changePointer()
        {
            //- Распределение планов по штукам, рублям, распределение бонусов по рублям и процентам
            if (radioButton1.Checked == true)
            {
                //- План по позициям
                if (checkBox1.Checked == true && checkBox2.Checked == false && checkBox3.Checked == true && checkBox4.Checked == false)
                {
                    //- План в рублях, бонус в рублях
                    pointer = 0;
                }
                else if (checkBox1.Checked == true && checkBox2.Checked == false && checkBox3.Checked == false && checkBox4.Checked == true)
                {
                    //- План в рублях, бонус в процентах
                    pointer = 1;
                }
                else if (checkBox1.Checked == true && checkBox2.Checked == false && checkBox3.Checked == true && checkBox4.Checked == true)
                {
                    //- План в рублях, бонус в рублях и процентах
                    pointer = 2;
                }
                else if (checkBox1.Checked == false && checkBox2.Checked == true && checkBox3.Checked == true && checkBox4.Checked == false)
                {
                    //- План в штуках, бонус в рублях
                    pointer = 3;
                }
                else if (checkBox1.Checked == false && checkBox2.Checked == true && checkBox3.Checked == false && checkBox4.Checked == true)
                {
                    //- План в штуках, бонус в процентах
                    pointer = 4;
                }
                else if (checkBox1.Checked == false && checkBox2.Checked == true && checkBox3.Checked == true && checkBox4.Checked == true)
                {
                    //- План в штуках, бонус в рублях и процентах
                    pointer = 5;
                }
                else if (checkBox1.Checked == true && checkBox2.Checked == true && checkBox3.Checked == true && checkBox4.Checked == true)
                {
                    //- План в штуках и рублях, бонус в рублях и процентах
                    pointer = 6;
                }
                else if (checkBox1.Checked == false && checkBox2.Checked == false)
                {
                    MessageBox.Show("Не выбран показатель планов");
                    pointer = -1;
                }
                else if (checkBox3.Checked == false && checkBox4.Checked == false)
                {
                    MessageBox.Show("Не выбран показатель бонусов");
                    pointer = -1;
                }
            }
            //- План по группам
            else if (radioButton2.Checked == true)
            {
                if (checkBox1.Checked == true && checkBox2.Checked == false && checkBox3.Checked == true && checkBox4.Checked == false)
                {
                    //- План в рублях, бонус в рублях
                    pointer = 7;
                }
                else if (checkBox1.Checked == true && checkBox2.Checked == false && checkBox3.Checked == false && checkBox4.Checked == true)
                {
                    //- План в рублях, бонус в процентах
                    pointer = 8;
                }
                else if (checkBox1.Checked == false && checkBox2.Checked == true && checkBox3.Checked == true && checkBox4.Checked == false)
                {
                    //- План в штуках, бонус в рублях
                    pointer = 9;
                }
                else if (checkBox1.Checked == false && checkBox2.Checked == true && checkBox3.Checked == false && checkBox4.Checked == true)
                {
                    //- План в штуках, бонус в процентах
                    pointer = 10;
                }
                else if (checkBox1.Checked == true && checkBox2.Checked == false && checkBox3.Checked == true && checkBox4.Checked == true)
                {
                    //- План в рублях, бонус в рублях и процентах
                    pointer = 11;
                }
                else if (checkBox1.Checked == false && checkBox2.Checked == true && checkBox3.Checked == true && checkBox4.Checked == true)
                {
                    //- План в штуках, бонус в рублях и процентах
                    pointer = 12;
                }
                else if (checkBox1.Checked == true && checkBox2.Checked == true && checkBox3.Checked == true && checkBox4.Checked == true)
                {
                    //- План в штуках и рублях, бонус в рублях и процентах
                    pointer = 13;
                }
                else if (checkBox1.Checked == false && checkBox2.Checked == false)
                {
                    MessageBox.Show("Не выбран показатель планов");
                    pointer = -1;
                }
                else if (checkBox3.Checked == false && checkBox4.Checked == false)
                {
                    MessageBox.Show("Не выбран показатель бонусов");
                    pointer = -1;
                }
            }
            
        }

        private void button7_Click(object sender, EventArgs e)
        {
            //- Занести информацию в базу данных 
            int rezult = 0;

            DataTable dt_dr = new DataTable();              //- для передачи в таблицу кодов товара
            DataTable dt_plr = new DataTable();             //- план в рублях
            DataTable dt_plc = new DataTable();             //- план в штуках
            DataTable dt_br = new DataTable();              //- бонус в рублях
            DataTable dt_bc = new DataTable();              //- бонус в процентах
            //- Для заполнения планов по товарам есть колонка с учётной ценой товара
            if (pointer >= 0 && pointer < 7)
                {
                    for (int y = 0; y < 3; y++)
                    {
                        dt_dr.Columns.Add();
                    }
                    for (int i = 0; i < 5; i++)
                    {
                        dt_plr.Columns.Add();
                        dt_plc.Columns.Add();
                        dt_br.Columns.Add();
                        dt_bc.Columns.Add();
                    }
                    foreach (DataRow dr in dt_plans[pointer].Rows)
                    {
                        DataRow dd = dt_dr.NewRow();
                        dd[0] = dr[0];
                        dd[1] = dr[2];
                        dt_dr.Rows.Add(dd);
                    }
                }
                else
                {
                    for (int i = 0; i < 4; i++)
                    {
                        dt_plr.Columns.Add();
                        dt_plc.Columns.Add();
                        dt_br.Columns.Add();
                        dt_bc.Columns.Add();
                    }
                }
                switch (pointer)
                {
                    case 0:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plr.NewRow();
                                    DataRow d2 = dt_br.NewRow();
                                    for (int j = 0; j < 5; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 3];
                                            d2[j] = dr[j + 6];
                                        }
                                    }
                                    dt_plr.Rows.Add(d1);
                                    dt_br.Rows.Add(d2);
                                }
                            }
                            break;
                        }
                    case 1:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plr.NewRow();
                                    DataRow d2 = dt_bc.NewRow();
                                    for (int j = 0; j < 5; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 3];
                                            d2[j] = dr[j + 6];
                                        }
                                    }
                                    dt_plr.Rows.Add(d1);
                                    dt_bc.Rows.Add(d2);
                                }
                            }
                            break;
                        }
                    case 2:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plr.NewRow();
                                    DataRow d2 = dt_br.NewRow();
                                    DataRow d3 = dt_bc.NewRow();
                                    for (int j = 0; j < 5; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                            d3[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 3];
                                            d2[j] = dr[j + 6];
                                            d3[j] = dr[j + 9];
                                        }
                                    }
                                    dt_plr.Rows.Add(d1);
                                    dt_br.Rows.Add(d2);
                                    dt_bc.Rows.Add(d3);
                                }
                            }
                            break;
                        }
                    case 3:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plc.NewRow();
                                    DataRow d2 = dt_br.NewRow();
                                    for (int j = 0; j < 5; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 3];
                                            d2[j] = dr[j + 6];
                                        }
                                    }
                                    dt_plc.Rows.Add(d1);
                                    dt_br.Rows.Add(d2);
                                }
                            }

                            break;
                        }
                    case 4:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plc.NewRow();
                                    DataRow d2 = dt_bc.NewRow();
                                    for (int j = 0; j < 5; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 3];
                                            d2[j] = dr[j + 6];
                                        }
                                    }
                                    dt_plc.Rows.Add(d1);
                                    dt_bc.Rows.Add(d2);
                                }
                            }
                            break;
                        }
                    case 5:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plc.NewRow();
                                    DataRow d2 = dt_br.NewRow();
                                    DataRow d3 = dt_bc.NewRow();
                                    for (int j = 0; j < 5; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                            d3[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 3];
                                            d2[j] = dr[j + 6];
                                            d3[j] = dr[j + 9];
                                        }
                                    }
                                    dt_plc.Rows.Add(d1);
                                    dt_br.Rows.Add(d2);
                                    dt_bc.Rows.Add(d3);
                                }
                            }
                            break;
                        }
                    case 6:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plr.NewRow();
                                    DataRow d2 = dt_plc.NewRow();
                                    DataRow d3 = dt_br.NewRow();
                                    DataRow d4 = dt_bc.NewRow();
                                    for (int j = 0; j < 5; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                            d3[j] = dr[j];
                                            d4[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 3];
                                            d2[j] = dr[j + 6];
                                            d3[j] = dr[j + 9];
                                            d4[j] = dr[j + 12];
                                        }
                                    }
                                    dt_plr.Rows.Add(d1);
                                    dt_plc.Rows.Add(d2);
                                    dt_br.Rows.Add(d3);
                                    dt_bc.Rows.Add(d4);
                                }
                            }
                            break;

                        }

                    case 7:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plr.NewRow();
                                    DataRow d2 = dt_br.NewRow();
                                    for (int j = 0; j < 4; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 1];
                                            d2[j] = dr[j + 4];
                                        }
                                    }
                                    dt_plr.Rows.Add(d1);
                                    dt_br.Rows.Add(d2);
                                }
                            }
                            break;
                        }
                    case 8:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plr.NewRow();
                                    DataRow d2 = dt_bc.NewRow();
                                    for (int j = 0; j < 4; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 1];
                                            d2[j] = dr[j + 4];
                                        }
                                    }
                                    dt_plr.Rows.Add(d1);
                                    dt_bc.Rows.Add(d2);
                                }
                            }
                            break;
                        }
                    case 9:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plc.NewRow();
                                    DataRow d2 = dt_br.NewRow();
                                    for (int j = 0; j < 4; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 1];
                                            d2[j] = dr[j + 4];
                                        }
                                    }
                                    dt_plc.Rows.Add(d1);
                                    dt_br.Rows.Add(d2);
                                }
                            }
                            break;
                        }
                    case 10:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plc.NewRow();
                                    DataRow d2 = dt_bc.NewRow();
                                    for (int j = 0; j < 4; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 1];
                                            d2[j] = dr[j + 4];
                                        }
                                    }
                                    dt_plc.Rows.Add(d1);
                                    dt_bc.Rows.Add(d2);
                                }
                            }

                            break;
                        }
                    case 11:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plc.NewRow();
                                    DataRow d2 = dt_br.NewRow();
                                    DataRow d3 = dt_bc.NewRow();
                                    for (int j = 0; j < 4; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                            d3[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 1];
                                            d2[j] = dr[j + 4];
                                            d3[j] = dr[j + 7];
                                        }
                                    }
                                    dt_plr.Rows.Add(d1);
                                    dt_br.Rows.Add(d2);
                                    dt_bc.Rows.Add(d3);
                                }
                            }
                            break;
                        }
                    case 12:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plc.NewRow();
                                    DataRow d2 = dt_br.NewRow();
                                    DataRow d3 = dt_bc.NewRow();
                                    for (int j = 0; j < 4; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                            d3[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 1];
                                            d2[j] = dr[j + 4];
                                            d3[j] = dr[j + 7];
                                        }
                                    }
                                    dt_plc.Rows.Add(d1);
                                    dt_br.Rows.Add(d2);
                                    dt_bc.Rows.Add(d3);
                                }
                            }
                            break;
                        }
                    case 13:
                        {
                            if (dt_plans[pointer].Rows.Count > 0)
                            {
                                foreach (DataRow dr in dt_plans[pointer].Rows)
                                {
                                    DataRow d1 = dt_plr.NewRow();
                                    DataRow d2 = dt_plc.NewRow();
                                    DataRow d3 = dt_br.NewRow();
                                    DataRow d4 = dt_bc.NewRow();
                                    for (int j = 0; j < 4; j++)
                                    {
                                        if (j == 0)
                                        {
                                            d1[j] = dr[j];
                                            d2[j] = dr[j];
                                            d3[j] = dr[j];
                                            d4[j] = dr[j];
                                        }
                                        else
                                        {
                                            d1[j] = dr[j + 1];
                                            d2[j] = dr[j + 4];
                                            d3[j] = dr[j + 7];
                                            d4[j] = dr[j + 10];
                                        }
                                    }
                                    dt_plr.Rows.Add(d1);
                                    dt_plc.Rows.Add(d2);
                                    dt_br.Rows.Add(d3);
                                    dt_bc.Rows.Add(d4);
                                }
                            }
                            break;
                        }
                }
                if (pointer >= 0 && pointer < 7)
                {
                    SqlStorProc.sp_params[] par = new SqlStorProc.sp_params[8];
                    par[0].name = "@pointer";
                    par[0].value = pointer;
                    par[1].name = "@periodPlan";
                    par[1].value = pp;
                    par[2].name = "@yearPlan";
                    par[2].value = dt;
                    par[3].name = "@tblDrGr";
                    par[3].value = dt_dr;
                    par[4].name = "@tblPlanR";
                    par[4].value = dt_plr;
                    par[5].name = "@tblPlanC";
                    par[5].value = dt_plc;
                    par[6].name = "@tblBonusR";
                    par[6].value = dt_br;
                    par[7].name = "@tblBonusC";
                    par[7].value = dt_bc;
                    rezult = (new SqlStorProc()).SqlProcExecNonQuery(conn, "pas_FillPlanDrugs", 300, par);
                }
                else
                {
                    SqlStorProc.sp_params[] par = new SqlStorProc.sp_params[7];
                    par[0].name = "@pointer";
                    par[0].value = pointer;
                    par[1].name = "@periodPlan";
                    par[1].value = pp;
                    par[2].name = "@yearPlan";
                    par[2].value = dt;
                    par[3].name = "@tblPlanR";
                    par[3].value = dt_plr;
                    par[4].name = "@tblPlanC";
                    par[4].value = dt_plc;
                    par[5].name = "@tblBonusR";
                    par[5].value = dt_br;
                    par[6].name = "@tblBonusC";
                    par[6].value = dt_bc;
                    rezult = (new SqlStorProc()).SqlProcExecNonQuery(conn, "pas_FillPlanGroup", 300, par);
                 }
            if (rezult == -1)
            {
                MessageBox.Show("Информация в базу внесена успешно");
            }
            else
            {
                MessageBox.Show("Информация НЕ внесена в базу"+"  "+rezult.ToString());
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //- Фильтр по товару
            DrugsFilter.DrugsFilter df = new DrugsFilter.DrugsFilter();
            
            this.Text += " Загрузка товара";
            dataGridView1.DataSource = null;
            if (dt_plans[pointer].Rows.Count > 0)
            {
                dt_plans[pointer].Clear();
            }
            df.ShowDialog();
            if (pointer >= 0 && pointer < 7)
            {
                if (df.dt_drug_tmp.Rows.Count > 0)
                {
                    foreach (DataRow dr in df.dt_drug_tmp.Rows)
                    {
                        DataRow row = dt_plans[pointer].NewRow();
                        DataTable tbl = new DataTable();
                        SqlStorProc.sp_params[] par = new SqlStorProc.sp_params[1];
                        row[0] = Convert.ToInt32(dr[1].ToString());
                        par[0].name = "@pointer";
                        par[0].value = Convert.ToInt32(dr[1].ToString());
                        tbl = (new SqlStorProc()).SqlProcExecWithQueryOneTable(conn, "pas_FillAttributesDrugs", 300, par);
                        row[1] = dr[2];
                        if (tbl.Rows.Count > 0)
                        {
                            //- Товар в группе
                            row[2] = tbl.Rows[0][1].ToString();
                        }
                        else
                        {
                            //- Товар не в группе

                        }
                        row[3] = comboBox1.Text + "." + comboBox2.Text;
                        dt_plans[pointer].Rows.Add(row);
                    }
                }
            }
            if (dt_plans[pointer].Rows.Count > 0)
            {
                dataGridView1.DataSource = dt_plans[pointer].DefaultView;
            }
            this.Text = this.Text.Replace("Загрузка товара", "");
        }

        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            //- План по позициям
            groupBox3.Visible = true;
            groupBox5.Visible = false;
            changePointer();
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            //- План по группам каталога
            groupBox5.Visible = true;
            groupBox3.Visible = false;
            changePointer();

        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            //- План в рублях
            changePointer();
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            //- План в штуках
            changePointer();
        }

        private void checkBox3_CheckedChanged(object sender, EventArgs e)
        {
            //- Бонус в рублях
            changePointer();
        }

        private void checkBox4_CheckedChanged(object sender, EventArgs e)
        {
            //- Бонус в процентах
            changePointer();
        }

        private void button8_Click_1(object sender, EventArgs e)
        {
            //- Создать файл для загрузки
            ExpToExcel ex = new ExpToExcel();
            ex.CreateExcelFile(dt_plans[pointer]);
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            //- Плановый период
            pp = Convert.ToInt32(dt_rezlt.Rows[comboBox1.SelectedIndex][0]);
            
            if (dt_plans[pointer] != null)
            {
                if (dt_plans[pointer].Rows.Count > 0)
                {
                    for (int i = 0; i < dt_plans[pointer].Rows.Count; i++)
                    {
                        if (pointer < 7)
                        {
                            dt_plans[pointer].Rows[i][3] = comboBox1.Text + "." + comboBox2.Text;
                        }
                        else
                        {
                            dt_plans[pointer].Rows[i][1] = comboBox1.Text + "." + comboBox2.Text;
                        }
                    }
                    dataGridView1.DataSource = null;
                    dataGridView1.DataSource = dt_plans[pointer];
                }
            }
        }

        private void dataGridView1_DataSourceChanged(object sender, EventArgs e)
        {
            //- При смене источника данных 
            dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
            if (dataGridView1.DataSource != null)
            {
                if (pointer < 7)
                {
                    //- план по товарам
                    for (int i = 0; i < 4; i++)
                    {
                        dataGridView1.Columns[i].ReadOnly = true;
                        dataGridView1.Columns[i].DefaultCellStyle.BackColor = Color.LightSkyBlue;
                    }
                }
                else
                {
                    //- план по группам
                    for (int i = 0; i < 2; i++)
                    {
                        dataGridView1.Columns[i].ReadOnly = true;
                        dataGridView1.Columns[i].DefaultCellStyle.BackColor = Color.LightSkyBlue;
                    }
                }
            }
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            //- Фильтр по группе 
            dataGridView1.DataSource = null;
            pGroup = null;
            dt_plans[pointer].Clear();
            Form2 form = new Form2();
            form.Show();
        }

        public void refrData()
        {
            //- Обновить данные на ДатаГриде
            if (pGroup != null && pGroup != " ")
            {
                if (pointer > 6)
                {
                    if (indexPeriod == 0)
                    {
                        //- Выбран фильтр по квартально
                        int i = 0;
                        for (i = 0; i < 4; i++)
                        {
                            DataRow dr = dt_plans[pointer].NewRow();
                            dr[0] = pGroup;
                            dr[1] = comboBox1.ValueMember[i] + "." + comboBox2.Text;
                            dt_plans[pointer].Rows.Add(dr);
                        }
                        dataGridView1.DataSource = dt_plans[pointer].DefaultView;
                    }
                    else if (indexPeriod == 1)
                    {
                        //- Выбран фильтр по полугодиям
                        DataRow dr = dt_plans[pointer].NewRow();
                        dr[0] = pGroup;
                        dr[1] = comboBox1.Text + "." + comboBox2.Text;
                        dt_plans[pointer].Rows.Add(dr);

                        dataGridView1.DataSource = dt_plans[pointer].DefaultView;
                    }
                    else if (indexPeriod == 2)
                    {
                        //- Выбран фильтр по месяцам
                        DataRow dr = dt_plans[pointer].NewRow();
                        dr[0] = pGroup;
                        dr[1] = comboBox1.Text + "." + comboBox2.Text;
                        dt_plans[pointer].Rows.Add(dr);
                        dataGridView1.DataSource = dt_plans[pointer].DefaultView;
                    }
                    else
                    {
                        //- Выбран фильтр по годам
                        DataRow dr = dt_plans[pointer].NewRow();
                        dr[0] = pGroup;
                        dr[1] = comboBox1.Text + "." + comboBox2.Text;
                        dt_plans[pointer].Rows.Add(dr);
                        dataGridView1.DataSource = dt_plans[pointer].DefaultView;
                    }
                }
                }
           else
           {
                MessageBox.Show("Выбран план по позициям товара");
           }
        }

        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            //- Год плана
            dt = Convert.ToInt32(comboBox2.Text);
            if (dt_plans[pointer] != null)
            {
                if (dt_plans[pointer].Rows.Count > 0)
                {
                    for (int i = 0; i < dt_plans[pointer].Rows.Count; i++)
                    {
                        if (pointer < 7)
                        {
                            if (indexPeriod == 19)
                            {
                                dt_plans[pointer].Rows[i][3] = "Годовой план на " + comboBox2.Text + " год";
                            }
                            else
                            {
                                dt_plans[pointer].Rows[i][3] = comboBox1.Text + "." + comboBox2.Text;
                            }
                        }
                        else
                        {
                            if (indexPeriod == 19)
                            {
                                dt_plans[pointer].Rows[i][1] = "Годовой план на " + comboBox2.Text + " год";
                            }
                            else
                            {
                                dt_plans[pointer].Rows[i][1] = comboBox1.Text + "." + comboBox2.Text;
                            }
                        }
                    }
                    dataGridView1.DataSource = null;
                    dataGridView1.DataSource = dt_plans[pointer];
                }
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            //- Очистить форму
            dataGridView1.DataSource = null;
            for (int i = 0; i < 14; i++)
            {
                dt_plans[i].Clear();
            }
        }
        private void pointerChange(int point)
        {
            switch (point)
            {
                case 0:
                    radioButton1.Checked = true;
                    radioButton2.Checked = false;
                    checkBox1.Checked = true;
                    checkBox2.Checked = false;
                    checkBox3.Checked = true;
                    checkBox4.Checked = false;
                    break;
                case 1:
                    radioButton1.Checked = true;
                    radioButton2.Checked = false;
                    checkBox1.Checked = true;
                    checkBox2.Checked = false;
                    checkBox3.Checked = false;
                    checkBox4.Checked = true;
                    break;
                case 2:
                    radioButton1.Checked = true;
                    radioButton2.Checked = false;
                    checkBox1.Checked = true;
                    checkBox2.Checked = false;
                    checkBox3.Checked = true;
                    checkBox4.Checked = true;
                    break;
                case 3:
                    radioButton1.Checked = true;
                    radioButton2.Checked = false;
                    checkBox1.Checked = false;
                    checkBox2.Checked = true;
                    checkBox3.Checked = true;
                    checkBox4.Checked = false;
                    break;
                case 4:
                    radioButton1.Checked = true;
                    radioButton2.Checked = false;
                    checkBox1.Checked = false;
                    checkBox2.Checked = true;
                    checkBox3.Checked = false;
                    checkBox4.Checked = true;
                    break;
                case 5:
                    radioButton1.Checked = true;
                    radioButton2.Checked = false;
                    checkBox1.Checked = false;
                    checkBox2.Checked = true;
                    checkBox3.Checked = true;
                    checkBox4.Checked = true;
                    break;
                case 6:
                    radioButton1.Checked = true;
                    radioButton2.Checked = false;
                    checkBox1.Checked = true;
                    checkBox2.Checked = true;
                    checkBox3.Checked = true;
                    checkBox4.Checked = true;
                    break;
                case 7:
                    radioButton1.Checked = false;
                    radioButton2.Checked = true;
                    checkBox1.Checked = true;
                    checkBox2.Checked = false;
                    checkBox3.Checked = true;
                    checkBox4.Checked = false;
                    break;
                case 8:
                    radioButton1.Checked = false;
                    radioButton2.Checked = true;
                    checkBox1.Checked = true;
                    checkBox2.Checked = false;
                    checkBox3.Checked = false;
                    checkBox4.Checked = true;
                    break;
                case 9:
                    radioButton1.Checked = false;
                    radioButton2.Checked = true;
                    checkBox1.Checked = false;
                    checkBox2.Checked = true;
                    checkBox3.Checked = true;
                    checkBox4.Checked = false;
                    break;
                case 10:
                    radioButton1.Checked = false;
                    radioButton2.Checked = true;
                    checkBox1.Checked = false;
                    checkBox2.Checked = true;
                    checkBox3.Checked = false;
                    checkBox4.Checked = true;
                    break;
                case 11:
                    radioButton1.Checked = false;
                    radioButton2.Checked = true;
                    checkBox1.Checked = true;
                    checkBox2.Checked = false;
                    checkBox3.Checked = true;
                    checkBox4.Checked = true;
                    break;
                case 12:
                    radioButton1.Checked = false;
                    radioButton2.Checked = true;
                    checkBox1.Checked = false;
                    checkBox2.Checked = true;
                    checkBox3.Checked = true;
                    checkBox4.Checked = true;
                    break;
                case 13:
                    radioButton1.Checked = false;
                    radioButton2.Checked = true;
                    checkBox1.Checked = true;
                    checkBox2.Checked = true;
                    checkBox3.Checked = true;
                    checkBox4.Checked = true;
                    break;
            }
        }


        private void radioButton3_CheckedChanged(object sender, EventArgs e)
        {
            //- Плановый период - год
            indexPeriod = 19;
            pp = indexPeriod;
            label2.Visible = false;
            comboBox1.Visible = false;
            comboBox2_SelectedIndexChanged(comboBox2, null);
            //changePeriod();
        }

        private void radioButton4_CheckedChanged(object sender, EventArgs e)
        {
            //- Плановый период - полугодие
            indexPeriod = 1;
            label2.Visible = true;
            comboBox1.Visible = true;
            changePeriod();
        }

        private void radioButton5_CheckedChanged(object sender, EventArgs e)
        {
            //- Плановый период - квартал
            indexPeriod = 0;
            label2.Visible = true;
            comboBox1.Visible = true;
            changePeriod();
        }

        private void radioButton6_CheckedChanged(object sender, EventArgs e)
        {
            //- Плановый период - месяц
            indexPeriod = 2;
            label2.Visible = true;
            comboBox1.Visible = true;
            changePeriod();
        }

        private void changePeriod()
        {
            //- Загрузка коллекции в comboBox1
            SqlStorProc.sp_params[] param = new SqlStorProc.sp_params[1];
            param[0].name = "@period";
            param[0].value = indexPeriod;
            dt_rezlt = (new SqlStorProc()).SqlProcExecWithQueryOneTable(conn, "pas_FillPeriodsPlan", 300, param);
            comboBox1.DataSource = dt_rezlt.DefaultView;
            comboBox1.DisplayMember = "periodName";                    // столбец для отображения
            comboBox1.ValueMember = "periodCode";                      // столбец для счёта
        }
    }
}
